home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / dasm80.zip / DASM80.ASM < prev    next >
Assembly Source File  |  1986-07-22  |  30KB  |  1,075 lines

  1.     .XALL
  2.     PAGE    ,132
  3.     TITLE DASM80 - 14 SEP 1985
  4.  
  5. ; ****************************************************************
  6. ; **                                **
  7. ; **           MS-DOS 8080/8085 DISASSEMBLER        **
  8. ; **                                **
  9. ; **............................................................**
  10. ; **                                **
  11. ; **      DASM80 DISASSEMBLES 8080/8085 INTEL HEX FILES.    **
  12. ; **                                **
  13. ; ****************************************************************
  14.  
  15. ; ..... MODULE CONNECTION POINTS .....
  16.  
  17.     EXTRN    MNEM:NEAR    ; MNEMONIC TABLE
  18.     EXTRN    BYTES:NEAR    ; BYTES TABLE
  19.  
  20. ; ..... MACROS .....
  21.  
  22. DISKRD    MACRO    NUMBYTE        ; READ SPECIFIED NUMBER OF BYTES FROM DISK
  23.     LOCAL    OK        ; OK IS A LOCAL SYMBOL
  24.     MOV    AH,READ        ; LOAD READ COMMAND
  25.     MOV    BX,RDHAND    ; LOAD READ FILE HANDLE
  26.     MOV    CX,NUMBYTE    ; LOAD NUMBER OF CHARACTERS TO BE READ
  27.     MOV    DX,OFFSET DSKBUF; POINT TO DISK BUFFER
  28.     INT    DOSFUNC        ; READ FROM INPUT FILE - ERROR?
  29.     JNC    OK        ; NO - DONE
  30.  
  31.     JMP    DSKERR        ; YES - DISPLAY ERROR
  32.  
  33. OK:
  34.     ENDM            ;
  35.  
  36. DISKWR    MACRO    NUMBYTE        ; WRITE SPECIFIED NUMBER OF BYTES TO DISK
  37.     LOCAL    OK        ; OK IS A LOCAL SYMBOL
  38.     MOV    AH,WRITE     ; LOAD WRITE COMMAND
  39.     MOV    BX,WRHAND    ; LOAD WRITE FILE HANDLE
  40.     MOV    CX,NUMBYTE    ; LOAD NUMBER OF CHARACTERS TO WRITE
  41.     MOV    DX,OFFSET DSKBUF; POINT TO DISK BUFFER
  42.     INT    DOSFUNC        ; WRITE TO OUTPUT - ERROR?
  43.     JNC    OK        ; NO - DONE
  44.  
  45.     JMP    DSKERR        ; YES - DISPLAY ERROR
  46.  
  47. OK:
  48.     ENDM            ;
  49.     PAGE
  50. ; ..... DOS COMMANDS .....
  51.  
  52. DOSFUNC EQU    21H        ; DOS FUNCTION INTERRUPT
  53. PR_STR    EQU    09H        ; DOS FUNCTION PRINT STRING COMMAND
  54. CREATE    EQU    3CH        ; CREATE FILE COMMAND
  55. OPEN    EQU    3DH        ; OPEN FILE COMMAND
  56. CLOSE    EQU    3EH        ; CLOSE FILE COMMAND
  57. READ    EQU    3FH        ; READ FILE COMMAND
  58. WRITE    EQU    40H        ; WRITE FILE COMMAND
  59. RDACC    EQU    0        ; READ FILE ACCESS CODE
  60. WRACC    EQU    1        ; WRITE FILE ACCESS CODE
  61. WRATT    EQU    0        ; WRITE FILE ATTRIBUTE CODE
  62.  
  63.  
  64. ; ..... CONSTANTS .....
  65.  
  66. MEMLEN    EQU    2000H        ; LENGTH OF MEMORY BUFFER
  67. MAXLEN    EQU    80        ; MAXIMUM FILE NAME LENGTH
  68. CR    EQU    0DH        ; ASCII <CR>
  69. LF    EQU    0AH        ; ASCII LINE FEED
  70. RS    EQU    1EH        ; ASCII RECORD SEPARATOR
  71. TAB    EQU    09H        ; ASCII TAB
  72. DATIND    EQU    00H        ; HEX FILE DATA RECORD INDICATOR
  73. EOFIND    EQU    01H        ; HEX FILE END OF FILE INDICATOR
  74.     PAGE
  75. STACK    SEGMENT STACK        ; STACK SEGMENT
  76.     DW    1024 DUP (?)    ; 1024 LEVELS OF STACK
  77. STACK    ENDS
  78.  
  79. DATA    SEGMENT PUBLIC        ; DATA SEGMENT
  80.  
  81. ; ****************************************************************
  82. ; **                                **
  83. ; **            MISCELLANEOUS STRINGS            **
  84. ; **                                **
  85. ; ****************************************************************
  86.  
  87. MSGORG    DB    ';',CR,LF,TAB,'ORG',TAB,'0'
  88. LENORG    EQU    $-MSGORG
  89.  
  90. MSGEND    DB    ';',CR,LF,TAB,'END',CR,LF
  91. LENEND    EQU    $-MSGEND
  92.  
  93.  
  94. ; ****************************************************************
  95. ; **                                **
  96. ; **              ERROR STRINGS             **
  97. ; **                                **
  98. ; ****************************************************************
  99.  
  100. MBCOM    DB    CR,LF,'COMMAND LINE ERROR',CR,LF,LF,'$'
  101.  
  102. MBHEX    DB    CR,LF,'BAD HEX DATA',CR,LF,LF,'$'
  103.  
  104. MDISK0    DB    CR,LF,'ERROR 0 - DISK FULL',CR,LF,LF,'$'
  105.  
  106. MDISK1    DB    CR,LF,'ERROR 1 - INVALID FUNCTION',CR,LF,LF,'$'
  107.  
  108. MDISK2    DB    CR,LF,'ERROR 2 - FILE NOT FOUND',CR,LF,LF,'$'
  109.  
  110. MDISK3    DB    CR,LF,'ERROR 3 - PATH NOT FOUND',CR,LF,LF,'$'
  111.  
  112. MDISK4    DB    CR,LF,'ERROR 4 - TOO MANY OPEN FILES',CR,LF,LF,'$'
  113.  
  114. MDISK5    DB    CR,LF,'ERROR 5 - ACCESS DENIED',CR,LF,LF,'$'
  115.  
  116. MDISK6    DB    CR,LF,'ERROR 6 - INVALID FILE HANDLE',CR,LF,LF,'$'
  117.  
  118. MUKNOW    DB    CR,LF,'UNKNOWN DISK ERROR',CR,LF,LF,'$'
  119.     PAGE
  120. ; ****************************************************************
  121. ; **                                **
  122. ; **            PROGRESS MESSAGE STRINGS            **
  123. ; **                                **
  124. ; ****************************************************************
  125.  
  126. MRCOM    DB    CR,LF,'READING COMMAND LINE',CR,LF,'$'
  127.  
  128. MOPENR    DB    'OPENING READ FILE',CR,LF,'$'
  129.  
  130. MCHEX    DB    'CONVERTING HEX FILE',CR,LF,'$'
  131.  
  132. MOPENW    DB    'CLOSING READ AND OPENING WRITE FILE',CR,LF,'$'
  133.  
  134. MDISS    DB    'DISASSEMBLING CONVERTED DATA',CR,LF,'$'
  135.  
  136. MCLOSW    DB    'CLOSING WRITE FILE',CR,LF,'$'
  137.  
  138. MEXIT    DB    'EXITING TO DOS',CR,LF,LF,'$'
  139.     PAGE
  140. ; ****************************************************************
  141. ; **                                **
  142. ; **            MEMORY ASSIGNMENTS            **
  143. ; **                                **
  144. ; ****************************************************************
  145.  
  146. DSKBUF    DB    80 DUP (?)    ; DISK I/O BUFFER
  147.  
  148. DSKCNT    DW    (?)        ; DISK BUFFER COUNTER
  149.  
  150. RDFILE    DB    MAXLEN+1 DUP (0); INPUT FILE NAME BUFFER
  151.  
  152. WRFILE    DB    MAXLEN+1 DUP (0); OUTPUT FILE NAME BUFFER
  153.  
  154. RDHAND    DW    (?)        ; READ FILE HANDLE
  155.  
  156. WRHAND    DW    (?)        ; WRITE FILE HANDLE
  157.  
  158. CHKACC    DB    (?)        ; CHECKSUM ACCUMULATOR
  159.  
  160. DSKPTR    DW    (?)        ; DISK BUFFER POINTER
  161.  
  162. MEMPTR    DW    (?)        ; MEMORY POINTER
  163.  
  164. MEMCNT    DW    (?)        ; MEMORY COUNTER
  165.  
  166. NUMREC    DW    (?)        ; NUMBER OF RECORDS IN CURRENT LINE
  167.  
  168. RECNUM    DW    (?)        ; NUMBER OF BYTES FOR NUMREC RECORDS
  169.  
  170. CURADD    DW    (?)        ; CURRENT ADDRESS
  171.  
  172.     DB    (0)        ; DUMMY START OF MEMBUF
  173. MEMBUF    DB    MEMLEN DUP (0)    ; MEMORY BUFFER
  174.  
  175. DATA    ENDS
  176.     PAGE
  177. CODE    SEGMENT            ; CODE SEGMENT
  178.     ASSUME    CS:CODE,DS:DATA,ES:DATA,SS:STACK
  179.  
  180. ; ****************************************************************
  181. ; **                                **
  182. ; **              MAIN PROGRAM                **
  183. ; **                                **
  184. ; ****************************************************************
  185.  
  186. DASM80    PROC    FAR        ;
  187.  
  188.     PUSH    DS        ;
  189.     MOV    AX,0        ;
  190.     PUSH    AX        ; SET UP FOR A FAR RETURN TO DOS
  191.  
  192.     MOV    AX,DATA        ;
  193.     MOV    DS,AX        ; SET UP DATA SEGMENT REGISTER
  194.  
  195.     MOV    DX,OFFSET MRCOM ; POINT TO READING COMMAND LINE MESSAGE
  196.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  197.     CALL    RCMD        ; READ COMMAND LINE
  198.  
  199.     MOV    DX,OFFSET MOPENR; POINT TO OPENING INPUT FILE MESSAGE
  200.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  201.     CALL    OPENRD        ; OPEN INPUT FILE FOR READ
  202.  
  203.     MOV    DX,OFFSET MCHEX ; POINT TO CONVERTING HEX FILE MESSAGE
  204.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  205.     CALL    CHEX        ; CONVERT INPUT FILE
  206.  
  207.     MOV    DX,OFFSET MOPENW; POINT TO OPENING OUTPUT FILE MESSAGE
  208.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  209.     CALL    OPENWR        ; OPEN OUTPUT FILE FOR WRITE
  210.  
  211.     MOV    DX,OFFSET MDISS ; POINT TO DISASSEMBLING MESSAGE
  212.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  213.     CALL    DISS        ; DISASSEMBLE FILE
  214.  
  215.     MOV    DX,OFFSET MCLOSW; POINT TO CLOSING WRITE FILE MESSAGE
  216.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  217.     CALL    CLOSWR        ; DISASSEMBLE FILE
  218.  
  219.     MOV    DX,OFFSET MEXIT ; POINT TO EXITING MESSAGE
  220.     CALL    MSGCO        ; WRITE MESSAGE TO STANDARD OUTPUT
  221.     RET            ; RETURN TO DOS
  222.  
  223. DASM80    ENDP            ;
  224.     PAGE
  225. ; ****************************************************************
  226. ; **                                **
  227. ; **            READ COMMAND LINE            **
  228. ; **                                **
  229. ; ****************************************************************
  230.  
  231. RCMD    PROC    NEAR        ;
  232.  
  233.     MOV    BX,80H        ; POINT TO NUMBER OF RECEIVED CHARACTERS
  234.     MOV    CH,ES:[BX]    ; LOAD NUMBER OF RECEIVED CHARACTERS
  235.     OR    CH,CH        ; ZERO CHARACTERS?
  236.     JZ    RCMD25        ; YES - DISPLAY ERROR
  237.  
  238.     INC    BX        ; NO - POINT TO CHARACTERS
  239.     MOV    DI,OFFSET RDFILE; POINT TO INPUT FILE NAME BUFFER
  240.     MOV    CL,MAXLEN    ; LOAD MAXIMUM FILE NAME LENGTH
  241.  
  242.     MOV    AL,ES:[BX]    ; READ NEXT CHARACTER
  243.     INC    BX        ; ADVANCE POINTER
  244.     DEC    CH        ; RETARD CHARACTER COUNTER - END?
  245.     JZ    RCMD25        ; YES - DISPLAY ERROR
  246.  
  247.     CMP    AL,' '        ; NO - SPACE?
  248.     JNZ    RCMD25        ; NO - DISPLAY ERROR
  249.  
  250. RCMD05:
  251.     MOV    AL,ES:[BX]    ; YES - READ NEXT CHARACTER
  252.     MOV    [DI],AL        ; WRITE TO INPUT FILE NAME BUFFER
  253.     CMP    AL,' '        ; SPACE?
  254.     JZ    RCMD10        ; YES - LOAD OUTPUT FILE NAME
  255.  
  256.     INC    BX        ; NO -
  257.     INC    DI        ;    - ADVANCE POINTERS
  258.     DEC    CH        ; RETARD CHARACTER COUNTER - END?
  259.     JZ    RCMD25        ; YES - DISPLAY ERROR
  260.  
  261.     DEC    CL        ; NO - RETARD FILE NAME COUNTER - TOO LONG?
  262.     JZ    RCMD25        ; YES - DISPLAY ERROR
  263.  
  264.     JMP    RCMD05        ; NO - CONTINUE
  265.  
  266. RCMD10:
  267.     INC    BX        ; ADVANCE COMMAND LINE POINTER
  268.     DEC    CH        ; DECREMENT CHARACTER COUNTER - END?
  269.     JZ    RCMD25        ; YES - DISPLAY ERROR
  270.  
  271.     MOV    DI,OFFSET WRFILE; NO - POINT TO OUTPUT FILE NAME BUFFER
  272.     MOV    CL,MAXLEN    ; LOAD MAXIMUM FILE NAME LENGTH
  273.  
  274. RCMD20:
  275.     MOV    AL,ES:[BX]    ; READ NEXT CHARACTER
  276.     CMP    AL,' '        ; SPACE?
  277.     JZ    RCMD25        ; YES - DISPLAY ERROR
  278.  
  279.     MOV    [DI],AL        ; NO - WRITE TO OUTPUT FILE NAME BUFFER
  280.     INC    BX        ;
  281.     INC    DI        ; ADVANCE POINTERS
  282.     DEC    CH        ; RETARD COUNTER - LAST CHARACTER?
  283.     JZ    RCMD30        ; YES - DONE
  284.  
  285.     DEC    CL        ; NO - RETARD COUNTER - FILE NAME TOO LONG?
  286.     JZ    RCMD25        ; YES - DISPLAY ERROR
  287.  
  288.     JMP    RCMD20        ; NO - CONTINUE
  289.  
  290. RCMD25:
  291.     MOV    DX,OFFSET MBCOM ; POINT TO BAD COMMAND LINE MESSAGE
  292.     JMP    MISERR        ; DISPLAY ERROR MESSAGE AND E